package com.powerbank.user.service;

import com.powerbank.user.vo.DepositRecordVO;
import com.powerbank.user.vo.DepositRefundResultVO;
import com.powerbank.user.vo.DepositSummaryVO;
import com.powerbank.user.vo.PageResult;
import com.powerbank.user.vo.PaymentResultVO;

import java.math.BigDecimal;

/**
 * 押金管理服务接口
 */
public interface DepositService {

    /**
     * 计算用户押金金额
     *
     * @param userId 用户ID
     * @return 押金金额
     */
    BigDecimal calculateDepositAmount(Long userId);

    /**
     * 检查用户是否需要支付押金
     *
     * @param userId 用户ID
     * @return 是否需要支付押金
     */
    boolean needPayDeposit(Long userId);

    /**
     * 创建押金支付订单
     *
     * @param userId        用户ID
     * @param orderId       租借订单ID
     * @param paymentMethod 支付方式
     * @return 支付结果
     */
    PaymentResultVO createDepositPayment(Long userId, Long orderId, String paymentMethod);

    /**
     * 处理押金退还
     *
     * @param userId         用户ID
     * @param orderId        租借订单ID
     * @param feeAmount      需要扣除的费用金额
     * @param refundReason   退还原因
     * @return 退还结果
     */
    DepositRefundResultVO processDepositRefund(Long userId, Long orderId, BigDecimal feeAmount, String refundReason);

    /**
     * 查询用户押金记录
     *
     * @param userId 用户ID
     * @param page   页码
     * @param size   页大小
     * @return 押金记录列表
     */
    PageResult<DepositRecordVO> getUserDepositRecords(Long userId, int page, int size);

    /**
     * 获取用户押金统计信息
     *
     * @param userId 用户ID
     * @return 押金统计信息
     */
    DepositSummaryVO getUserDepositSummary(Long userId);
}